PHP I/O
I/O即输出流和输入流,通常I/O流在开发语言之中非常常见,如Java、Python都支持I/O流。所谓I/O流无非就是输出文件、写入文件,通常I/O流包含了打开、读取、关闭、删除等常用操作。
目录
创建目录与获取目录及删除目录
创建目录
mkdir()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php if (mkdir(demo)) { echo "创建成功"; } else { echo "创建失败"; } ?> </body> </html>
|
删除目录
rmdir()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php mkdir("test"); if (rmdir("test")) { echo "删除成功"; } else { echo "删除失败"; } ?> </body> </html>
|
工作目录的获取与修改
getcwd()
getcwd()函数可以获取当前程序所处的目录,使用此函数可以获取到当前的工作目录。
1 2 3 4 5 6 7 8 9 10 11 12
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php echo getcwd(); ?> </body> </html>
|
chdir()
chidir()函数可以直接设置当前的工作目录,也就是说使用此函数可以指定工作目录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php mkdir("/test"); chdir('/test'); echo getcwd(); ?> </body> </html>
|
打开与关闭目录句柄
当文件和目录的访问都是通过句柄来实现的,而句柄就是打开一个文件所产生的变量$n即称之为句柄,操作完成后为了避免系统资源的小号应关闭句柄。如打开成功则返回TRUE,否则返回FALSE。而在PHP I/O中,打开句柄通常使用**opendir()来表示,而关闭句柄使用closedir()**来实现。
打开句柄
opendir()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $mkdir = "/Users"; $mkdir_open = opendir($mkdir); if ($mkdir_open) { echo "目录句柄打开成功"; } else { echo "目录句柄打开失败"; } ?> </body> </html>
|
关闭句柄
closedir()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $mkdir = "/Users"; $mkdir_open = opendir($mkdir); if ($mkdir_open) { echo "目录句柄打开成功"; } else { echo "目录句柄打开失败"; } closedir($mkdir_open); ?> </body> </html>
|
读取目录内容
PHP主要为开发者提供了**readdir()**函数用于读取目录内容,该参数是一个已经打开的目录句柄。在每次调用时返回目录下一个文件的文件名,列出来所有的文件名后,函数将返回FALSE,所以readdir()函数也可用于进行目录遍历。
读取目录内容
readdir()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $dir = "/test"; $dir_open = opendir($dir); // 打开目录句柄 if ($dir_open) { // 通过readdir()函数返回值是否为FALSE,直到判断至最后一个文件 while (false !== ($file = readdir($dir_open))) { echo $file,"<br>"; } closedir($dir_open); // 关闭目录句柄 } else { echo "打开目录失败"; } ?> </body> </html>
|
获取指定的目录和文件
scandir()
scandir()函数主要用于列出指定路径中的目录和文件,如果函数运行成功则返回该路径下的所有目录和文件名的数组,失败则返回FALSE。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $dir = "/"; $one = scandir($dir); if ($one == FALSE) { echo "读取失败"; } else { print_r($one); echo "<br>"; } ?> </body> </html>
|
文件
文件和目录之间的操作有一定的类似,一般操作文件方法主要分为打开、读取、写入、关闭等,与目录一样,如果要写入文件,则需要打开文件,之后为了避免占用太多资源则会关闭文件,在PHP文件流之中,主要可以使用**fopen()、fclose()**函数分别进行打开文件和关闭流操作
文件打开与关闭
文件访问权限
| ID |
DA |
FA |
| r |
只读方式打开文件[^从头读写] |
r |
| r+ |
读写方式打开文件[^从头读写] |
|
|
|
|
| w |
写入方式打开文件[^从头读写,如果文件存在则删除,不存在则创建] |
w |
| w+ |
读写方式打开文件[^从头读写,如果文件存在则删除,不存在则创建] |
|
|
|
|
| a |
写入方式打开文件[^从末尾读写,如果文件存在则删除,不存在则创建] |
a |
| a+ |
读写方式打开文件[^从末尾读写,如果文件存在则删除,不存在则创建] |
|
|
|
|
| x |
创建并以写入方式打开文件[^从头读写,如果文件存在则删除,不存在则创建] |
x |
| x+ |
创建并以读写方式打开文件[^从头读写,如果文件存在则删除,不存在则创建] |
|
|
|
|
| b |
二进制模式,主要用于连接在其他模式后面[^Windows 区分、Linux/UNIX不区分。如果文件系统能够区分二进制文件和文本文件,则需要使用到此选项] |
|
打开文件
fopen()
在PHP中主要使用fopen()函数打开文件,而fopen()函数可支持打开本地文件和以URL形式读取文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $one = fopen("l.php", "r+"); if ($one) { echo "打开成功"; } else { echo "打开失败"; } ?> </body> </html>
|
URL fopen()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $URL_open = fopen("http://clockshan.cn", "r"); if ($URL_open) { echo "打开成功"; } else { echo "打开失败"; } ?> </body> </html>
|
关闭文件
fclose()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $open = fopen("l.php", "w"); if (fclose($open)) { echo "关闭成功"; } else { echo "关闭失败"; }
?> </body> </html>
|
文件写创建与操作
创建文件
fopen()
在PHP中没有指定的创建文件函数,一般使用fopen()函数加文件模式(**”w”、”w+、“a”、”a+“**)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $one = fopen("deme.txt", "w"); if ($one) { echo "创建成功"; } else { echo "创建失败"; } ?> </body> </html>
|
文件写入
fwrite()
fwrite()函数可以向文件写入内容[^在文件已经打开的前提下。文件关闭后则不进行写入],由于UTF-8中文字符一个占两个字节,所以显示写入字节数为15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $dir = fopen("demo.txt", "w+"); $write = fwrite($dir, "你好世界!"); if ($write) { echo "写入成功"; echo "写入字节数为:",$write; fclose($dir); } else { echo "文件写入失败"; } ?> </body> </html>
|
文件读取
fread()
fread()函数可以用于读取文件中的内容,在PHP中,fread()函数可以指定最大字节数,默认最大取值为8192
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $data = fopen("deme.txt", "r"); $one = ""; // 初始化为空 while (!feof($data)) { $dataone = fread($data, 8192); $one = $dataone; } echo $one; fclose($data); ?> </body> </html>
|
file()
file()函数可以用于将整个文件读取到数组之中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $wire = file("deme.txt"); foreach ($wire as $key) { echo $key; } ?> </body> </html>
|
readfile()
readfile()函数主要用于输出文件内容到浏览器之中,如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $file = "deme.txt"; $data = readfile($file); echo "<br>"; echo "|- 当前字节数为",$data; ?> </body> </html>
|
fpassthru()
fpassthru()函数可以将指定的文件指针从当前未知读取到EOF(文档结尾),并把结果输出到缓冲区。使用fpassthru()函数需要先打开文件流、并将参数传递给fpassthru()函数,并到标准输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $name = "deme.txt"; $data = fopen($name, "r"); $num = fpassthru($data); echo "<br>"; echo "读取字节数为:",$num; fclose($data); ?> </body> </html>
|
file_get_contents()
file_get_contents()函数可以将整个或部分文件内容读取到一个字符串值中,整个执行过程共调用:fopen = 开启 、fread = 读取 、fclose = 关闭:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $filename = file_get_contents("deme.txt"); echo $filename; ?> </body> </html>
|
读取EOF数据
EFO是(“资料源无更多资料获取,End Of File”),在操作系统之中主要表示当前源无更多资料获取,所以在此表达含义为”最后一行数据:“
fgets()
fgets()函数的作用是可以读出一行文本逐一进行输出,而不像上述函数一样整合为一行进行输出[^默认的长度为1024个字节],如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $file = fopen("deme.txt", "r"); if ($file) { while (!feof($file)) { $bufer = fgets($file); echo $bufer,"<br>"; } fclose($file); } ?> </body> </html>
|
fgetss()
fgetss()函数的主要作用与fgets()作用基本相同,也是从文件指针处读取一行数据,fgetss()会尝试格式化HTML、Javascript、php等代码输出[^图1为fgetss()函数输出,图二为fgets函数输出。];
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $file = fopen("deme.txt", "r"); if ($file) { while (!feof($file)) { $bufer = fgetss($file); echo $bufer,"<br>"; } fclose($file); } ?> </body> </html>
|
删除文件
unlink()
在php之中,可使用unlink()函数进行删除不需要的文件,如果删除成功则返回TRUE、否则删除失败则返回FALSE;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $file = "D:/Program Files (x86)/phpStudy/WWW/text/1593173883_1490.gif"; // 删除文件 unlink($file);
// 检测文件是否存在 if (file_exists($file)) { echo "文件存在"; } else { echo "文件不存在"; } ?> </body> </html>
|
复制文件
copy()
PHP开发语言主要使用copy()来进行文件的复制:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $file = "D:/Program Files (x86)/phpStudy/WWW/text/1593173883_1490.gif"; $filedst = "D:/Program Files (x86)/phpStudy/WWW/text/one.gif"; if (copy($file, $filedst)) { echo "文件复制成功!"; } ?> </body> </html>
|
移动和重命名文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $file = "D:/Program Files (x86)/phpStudy/WWW/text/1593173883_1490.gif"; $filedst = "D:/Program Files (x86)/phpStudy/WWW/text/two.gif"; if (rename($file, $filedst)) { echo "重命名成功"; } else { echo "重命名失败"; } ?> </body> </html>
|
第一个字符
fgetc()
fgetc()函数主要用于从文件开头到文件结尾处进行输出,所以与上述fgetss()、fgets()函数输出差不多:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $data = fopen("deme.txt", "r"); while (!feof($data)) { $char = fgetc($data); echo ($char == "\n"?'<br>':$char); } ?> </body> </html>
|
| ID |
DA |
FA |
| mdkir() |
创建目录 |
目录 |
| rmdir() |
删除目录 |
|
|
|
|
| getcwd() |
获取当前所在目录 |
|
| chdir() |
是指当前所在的工作目录[^即指定目录] |
|
|
|
|
| opendir() |
打开句柄 |
|
| closedir() |
关闭句柄 |
|
|
|
|
| raddir() |
读取目录内容 |
|
| scandir() |
获取指定的目录和文件 |
|
|
|
|
| fopen() |
打开文件[^fopen(URL)支持读取URL形式文件,fopen()可以搭配文件模式进行创建文件] |
文件打开于关闭[^含创建] |
| fclose() |
关闭文件 |
|
|
|
|
| fwrite() |
文件写入 |
文件读取 |
| fread() |
文件读取 |
|
| file() |
将整个文件读取到数组 |
|
|
|
|
| readfile() |
输出文件到浏览器中 |
|
| fpassthru() |
从指定文件指针中从开头读取到EOF |
|
| file_get_contents() |
可以将整个或部分文件内容读取到一个字符串值中[^fopen = 开启 、fread = 读取 、fclose = 关闭] |
|
|
|
|
| fgets() |
读出一行文本逐一进行输出,而不像上述函数一样整合为一行进行输出[^默认的长度为1024个字节] |
读取EOF数据 |
| fgetss() |
fgetss()函数的主要作用与fgets()作用基本相同,也是从文件指针处读取一行数据,fgetss()会尝试格式化HTML、Javascript、php等代码输出[^图1为fgetss()函数输出,图二为fgets函数输出。]; |
|
|
|
|
| fgetc() |
从文件的开头到结尾处进行输出[^所以与上述fgetss()、fgets()函数输出差不多] |
|
|
|
|
| unlink() |
删除文件 |
文件删除 |
|
|
|
| copy() |
复制文件 |
文件复制 |
|
|
|
| rename() |
文件重命名 |
重命名文件 |
⬅️ Go back